home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Dev / misc / temgen.lha / Temgen / tg-0.11 / oprint.c < prev    next >
C/C++ Source or Header  |  2002-12-18  |  2KB  |  82 lines

  1. #include "atom.h"
  2. #include "omani.h"
  3. #include "sysdefs.h"
  4.  
  5. static int getlinelen( const char *buf )
  6. {
  7.     const char *nl;
  8.     int sl;
  9.     
  10.     if ( !( buf && buf[0] ) ) return 0;
  11.     
  12.     nl = strrchr( buf, '\n' );
  13.     sl = strlen( buf );
  14.     return nl ? sl-(nl-buf): sl;
  15. }
  16.  
  17. void  ob_print( char *buf, int size, int obj )
  18. {
  19.     int typ, n, i, len1, len2, name;  
  20.     
  21.     typ = ob_type( obj );
  22.     switch( typ ) {
  23.         case 'i':
  24.             snprintf( buf, size, "%d", ob_geti( obj ));
  25.             break;
  26.         case 'f':
  27.             snprintf( buf, size, "%f", ob_getf( obj ));
  28.             break;
  29.         case 's':
  30.             snprintf( buf, size, "\"%s\"", ob_gets( obj ));
  31.             break;
  32.         case 'R':
  33.             ob_print( buf, size, ob_geti( obj ));
  34.             break;
  35.         case 'r':
  36.             if ( size < 6 ) return;
  37.             buf[ 0 ] = '{';
  38.             buf[ 1 ] = ' ';
  39.             buf[ 2 ] = '\0';
  40.             n = ob_count( obj );
  41.             for ( i=0; i<n; i++ ) {
  42.                 len1 = strlen( buf );
  43.                 if ( len1 > size-6 ) return;
  44.                 name = ob_fieldname( obj, i );
  45.                 snprintf( buf+len1, size-len1, "%s: ", atom_name(name) );
  46.                 len1 = strlen( buf );
  47.                 if ( len1 > size-6 ) return;
  48.                 ob_print( buf+len1, size-len1, ob_field( obj, name ));
  49.                 len2 = strlen( buf );
  50.                 if ( len2 > size-6 ) return;
  51.                 len1 = getlinelen( buf );
  52.                 if ( len1 > 70 )
  53.                     strcat( buf, (i==n-1) ? " }": ",\n" );
  54.                 else
  55.                     strcat( buf, (i==n-1) ? " }": ", " );
  56.             }
  57.             break;
  58.         case 'a':
  59.             if ( size < 6 ) return;
  60.             buf[ 0 ] = '[';
  61.             buf[ 1 ] = ' ';
  62.             buf[ 2 ] = '\0';
  63.             n = ob_count( obj );
  64.             for ( i=0; i<n; i++ ) {
  65.                 len1 = strlen( buf );
  66.                 if ( len1 > size-6 ) return;
  67.                 ob_print( buf+len1, size-len1, ob_item( obj, i ));
  68.                 len2 = strlen( buf );
  69.                 if ( len2 > size-6 ) return;
  70.                 len1 = getlinelen( buf );
  71.                 if ( len1 > 70 )
  72.                     strcat( buf, (i==n-1) ? " ]": ",\n" );
  73.                 else
  74.                     strcat( buf, (i==n-1) ? " ]": ", " );
  75.             }
  76.             break;
  77.             break;
  78.         default :
  79.             snprintf( buf, size, "( type:0x%02x )", typ );
  80.     }
  81. }
  82.